package RICM.Repository.Client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;
import java.util.Date;

import RICM.Repository.source.Hotel;
import RICM.Repository.source._Annuaire;
import RICM.Repository.source._Chaine;;

public class LookForHotel{
	/** le critère de localisaton choisi */
	private String localisation;
	private ArrayList<String> listeServer;
	private String serveurAnnuaire;
	// ...
	
	/**
	 * Définition de l'objet représentant l'interrogation.
	 * @param args les arguments n'en comportant qu'un seul qui indique le critère
	 *          de localisation
	 */
	public LookForHotel(String... args){
		localisation = args[0];
		listeServer = new ArrayList<String>();
		for(int i=1;i<args.length-1;i++)
			listeServer.add(args[i]);
		
		serveurAnnuaire = args[args.length-1];
	}
	
	/**
	 * réalise une intérrogation
	 * @return la durée de l'interrogation
	 * @throws RemoteException
	 */
	public long call() throws RemoteException{
		long time = System.currentTimeMillis();
		
		try {
			_Annuaire ann = (_Annuaire) Naming.lookup(serveurAnnuaire);
			for(String s : listeServer){
				_Chaine c = (_Chaine) Naming.lookup(s);
				for(Hotel h : c.get(localisation)){
					System.out.println("Hotel : "+h.getName()+" Localisation : "+h.getLocalisation()+" Tel : "+ann.get(h.getName()));
				}
			}		
			
		}catch (MalformedURLException e) {
			System.err.println("URL malformee");
			e.printStackTrace();
		} catch (NotBoundException e) {
			System.err.println("Serveur inconnu");
			e.printStackTrace();
		}		
		
		return (System.currentTimeMillis() - time);
	}

	public static void main(String args[]){
		try {
			System.out.println("Cout d'execution : "+new LookForHotel(args).call()+" msec");
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	// ...
}
